package dev.view;

import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.InputStreamReader;

import dev.controller.myControllerImpl;

public class UserroleEndbenutzer implements UserroleInterface{
	BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	private myControllerImpl control;
	final static String[] skills = {
		"Stationsfahrplan anfordern",
		"Zugauskunft anfordern",
		"Abmelden","Verlassen"
	};
	@Override
	public void showMenu(myControllerImpl inControl) {
		control = inControl;
		boolean ok;
		int menuWahl;
		do{
			print("Menu");
			for(int i=0;i<skills.length;++i){
				if(i<9) print(" "+(i+1)+". "+skills[i]); else print((i+1)+". "+skills[i]);
			}
			menuWahl = 0;
			do{
				ok = true;
				try{
					System.out.print("Auswahl:\t");
					menuWahl = Integer.parseInt(input.readLine());
				}catch(Exception e){
					ok = false;
					print("Falsche Eingabe!");
					Toolkit.getDefaultToolkit().beep();
				}
			}while(!ok);
			selectActivity(menuWahl);
		}while(menuWahl!=4);
	}
	public void selectActivity(int index) {
		switch (index){
			case  1:  stationsfahrplan_anfordern(); break;
			case  2:	zugauskunft_anfordern();  break;
			case  3:	break;
			case  4:	break;
			default:	break;	
		}
	}
	private void stationsfahrplan_anfordern(){
		boolean ok;
		int statID = 0;
		do {
			ok = true;
			print("Eingabe der erwarteten Parameter!");
			try{
				statID = Integer.parseInt(input.readLine());
			}catch(Exception e){
				ok = false;
				print("Falsche Eingabe!");
				Toolkit.getDefaultToolkit().beep();
			}
		}while(!ok);
		control.stationsfahrplan_anfordern(statID);
	}
	private void zugauskunft_anfordern(){
		boolean ok;
		String ankunftszeit = "";
		int statID_start = 0, statID_ziel = 0, umstiege = 0,
		    zeitH = 0, zeitM = 0;
		do{
			do {
				ok = true;
				print("Eingabe der erwarteten Parameter!");
				try{
					System.out.print("Stations-ID(Start):\t");
					statID_start = Integer.parseInt(input.readLine());
					System.out.print("Stations-ID(Ziel):\t");
					statID_ziel = Integer.parseInt(input.readLine());
					
					System.out.print("ankunftszeit(HH24:MI):\t");
					ankunftszeit = input.readLine();
					ankunftszeit = ankunftszeit.replaceAll(" ",""); // Entfernt alle Leerzeichen
					String[] zeitTmp = ankunftszeit.split(":");
					zeitH = Integer.parseInt(entferneFuehrendenNullen(zeitTmp[0]));
					zeitM = Integer.parseInt(entferneFuehrendenNullen(zeitTmp[1]));
					
					System.out.print("Umstiege:\t");
					umstiege = Integer.parseInt(input.readLine());
				}catch(Exception e){
					ok = false;
					print("Falsche Eingabe!");
					Toolkit.getDefaultToolkit().beep();
				}
			}while(!ok);
			if( zeitH < 0 || zeitH > 23 || zeitM < 0 || zeitM > 59 ){
				ok = false;
				print("Falsche Zeitangabe!");
				Toolkit.getDefaultToolkit().beep();
			}
		}while(!ok);
		control.zugauskunft_anfordern(statID_start, statID_ziel, zeitH, zeitM, umstiege);
	}
	private String entferneFuehrendenNullen(String text){
		String returnText = text;
		while(returnText.startsWith("0") && returnText.length()>1){
			returnText = returnText.substring(1);
		}
		return returnText;
	}
	@Override
	public String getName() {
		return "Endbenutzer";
	}
	public void print(String inString){
		System.out.println(inString); // :)
	}
}